class ArchivoSp < ActiveRecord::Base
	belongs_to :servicio
	belongs_to :moneda
	belongs_to :archivo
	belongs_to :archivo_servicio
	
	def costo_en(_moneda)
		TipoCambio.cambiar(costo, moneda, _moneda, fecha_calculo)		
	end
	
	def utilidad_en(_moneda)		
		precio_en(_moneda) - costo_en(_moneda)
	end
	
	def precio_en(_moneda)
		TipoCambio.cambiar(precio, moneda, _moneda, fecha_calculo)		
	end
	
	def costo
		precio_extranjero * cantidad
	end
	
	def utilidad
		precio - costo
	end
	
	def precio
		if utilidad_ajustada
			precio_publicado * cantidad
		else
			((precio_extranjero * (utilidad_porcentaje+100))/100) * cantidad
		end		
	end
	
	def self.generar(_servicio, nro_personas, fecha)		
  	sql = "select 
				s.id as servicio_id, 
				p.moneda_id,
				p.publicado as precio_publicado,	
				p.nacional as precio_nacional, 
				p.extranjero as precio_extranjero,
				ts.utilidad_porcentaje,
				ts.utilidad_ajustada,
			  ceil(#{nro_personas}/s.capacidad) as cantidad,
			  now() as fecha_calculo			  
			from 
				servicios s inner join precios p
			    on p.servicio_id = s.id
			  left outer join tipos_servicio ts
			    on s.tipo_servicio_id = ts.id
			where
			  s.id = #{_servicio.id.to_s} and
			  ('#{fecha}' between p.fecha_inicio and p.fecha_fin) and
			  (least(#{nro_personas},s.capacidad) between p.nro_personas_inicio and p.nro_personas_fin)"
		
		rpta = ArchivoSp.find_by_sql(sql)
		
		logger.debug "s.id = #{_servicio.id.to_s}"
		
		if rpta.size == 0
			raise "No existe precio para el servicio\nProveedor: '#{_servicio.proveedor}', Servicio: '#{_servicio}', nro: #{nro_personas}, fecha: #{fecha}"
		end		
		
		ArchivoSp.new(
			:servicio_id => rpta[0].servicio_id,
			:moneda_id => rpta[0].moneda_id,
			:precio_publicado => rpta[0].precio_publicado,
      :precio_extranjero => rpta[0].precio_extranjero,
      :precio_nacional => rpta[0].precio_nacional,
      :utilidad_porcentaje => rpta[0].utilidad_porcentaje,
      :utilidad_ajustada => rpta[0].utilidad_ajustada,
      :cantidad => rpta[0].cantidad,
      :fecha_calculo => rpta[0].fecha_calculo,
      :nro_paxs => nro_personas)
	end
	
end
